﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tweetinvi;
using Tweetinvi.Core.Enum;
using Tweetinvi.Core.Extensions;
using Tweetinvi.Core.Interfaces;
using Tweetinvi.Core.Interfaces.Controllers;
using Tweetinvi.Core.Interfaces.DTO;
using Tweetinvi.Core.Interfaces.Models;
using Tweetinvi.Core.Interfaces.oAuth;
using Tweetinvi.Core.Interfaces.Streaminvi;
using Tweetinvi.Json;
using Geo = Tweetinvi.Geo;
using SavedSearch = Tweetinvi.SavedSearch;
using Stream = Tweetinvi.Stream;

namespace TweetRating
{
    public class ComunicadorConTweeter : iComunicadorConFuenteDeInformacion
    {
        #region Construcor
        public ComunicadorConTweeter()
        {
            TwitterCredentials.SetCredentials("1858960208-bn5yK88XTwqRHyyTaEllEJUCIFhasTkmfth3bKJ", "USCtaTZsUVbNDyMedJ2NYhxUn8fTKTG4n9zO04Ia4", "HbPhQemkVgV0CsCPKK1Uzw", "Mufhxgd3QCJJH9Gy8Ycd8BjGFkzJvjAi6VxSGtX1s");
        }
        #endregion

        #region Metodos
        List<IComentario> iComunicadorConFuenteDeInformacion.solicitarComentarios(string unaPalabra, DateTime desde, DateTime hasta)
        {
            // Obtengo los tweets
            ITweetSearchParameters searchParameter = Search.GenerateSearchTweetParameter(unaPalabra);
            searchParameter.Lang = Language.Spanish;
            searchParameter.SearchType = SearchResultType.Popular;
            searchParameter.MaximumNumberOfResults = 100;
            searchParameter.Since = new DateTime(desde.Year, desde.Month, desde.Day);
            searchParameter.Until = new DateTime(hasta.Year, hasta.Month, hasta.Day + 1);
            List<ITweet> tweets = Search.SearchTweets(searchParameter);

            // Combierto los tweets en comentarios
            List<IComentario> comentarios = tweets.Select(unTweet => (new Comentario(unTweet.Text, unTweet.CreatedAt) as IComentario)).ToList();
            return comentarios.FindAll(unComentario => desde <= unComentario.obtenerFecha() && unComentario.obtenerFecha() <= hasta);
        }
        #endregion
    }
}
